package com.tiger.project.mapper;


import com.tiger.project.domain.Asset;
import com.tiger.project.domain.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * 【资产列表】Mapper接口
 *
 * @author standard
 * @date 2022-09-15
 */
@Component
public interface AssetMapper
{
    /**
     * 查询【资产列表】
     *
     * @param id 【资产列表】主键
     */
    public Asset selectAssetById(Long id);

    /**
     * 查询【资产列表】列表
     *
     * @param asset 【资产列表】
     * @return 【资产列表】集合
     */
    public List<Asset> selectAssetList(Asset asset);

    public List<Asset> selectAssetBookList(Asset asset);

    /**
     * 新增【资产列表】
     *
     * @param asset 【资产列表】
     * @return 结果
     */
    public int insertAsset(Asset asset);

    /**
     * 修改【资产列表】
     *
     * @param asset 【资产列表】
     * @return 结果
     */
    public int updateAsset(Asset asset);

    /**
     * 删除【资产列表】
     *
     * @param id 【资产列表】主键
     * @return 结果
     */
    public int deleteAssetById(Long id);

    /**
     * 批量删除【资产列表】
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAssetByIds(Long[] ids);

    /**
     *  资产关联巡查，维修，合同，水电不可删除
     */
    public int relevancyAsset(Long assetId);

    /**
     *工作台-资产统计
     * @param companyId
     * @return
     */
    List<Map<String, Object>> selectAssetCountListByCategory( @Param("companyId") Integer companyId);

    Map getLeasedCount(@Param("companyId") Integer companyId);

    Map getUnLeasedCount(@Param("companyId") Integer companyId);

    List<Asset> selectIdleAssetPage( @Param("asset") Asset asset);

    List<Asset> selectIdleAssetList(@Param("asset") Asset asset);

    List<RentAssetVO> selectRentAssetList(@Param("asset") Asset asset, @Param("currentYear") int currentYear, @Param("prevYear") int prevYear);

    List<RentAssetVO> selectRentAssetPage( @Param("asset") Asset asset,@Param("currentYear") int currentYear,@Param("prevYear") int prevYear);

    AssetStatisticsVO selectAssetStatistics(@Param("asset") Asset asset);

    List<MonitorAssetVO> selectMonitorAssetPage( @Param("asset") Asset asset);

    List<AssetStatisticsExportVO> selectAssetExportList(@Param("category") int i,@Param("companyId")Long companyId);

    List<AssetStatisticsBasicVO> selectAssetBasicPage( @Param("category") int i,@Param("companyId")Long companyId);

    List<AssetStatisticsUsedVO> selectAssetUsedPage( @Param("category") int i,@Param("companyId")Long companyId);

    List<Map<String, Object>> selectContractCount(@Param("companyId") Integer companyId);

    ContractPerformanceResp getPerformanceOfContract(@Param("companyId") Integer companyId);

    List<ContractOverdueRankingResp> getContractOverdueRanking(@Param("companyId") Integer companyId);

    ContractAnalysisVO contractAnalysisCount(@Param("contractType")String contractType, @Param("companyId")Integer companyId);

    List<AssetUsageVO> contractAnalysisPageList(@Param("contractType")String contractType, @Param("companyId")Integer companyId ,
                                                @Param("startTime") Date startTime, @Param("endTime") Date  endTime);

    List<Map<String, Object>> selectHouseAssetReceiptMoneyList(@Param("companyId") Integer companyId, @Param("year") Integer year, @Param("type") Integer type);

    /**
     *  房屋空置天数排名： 排前十，无关联合同不排，且可租面积>0
     * @param companyId
     * @return 返回
     */
    List<Map<String, Object>> selectVacantHouseList(@Param("companyId") Long companyId);

    /**
     *  总资产收益率: 总租金/可出租资产资产总价值（房屋价值）
     * @param companyId
     * @return 返回
     */
    Map<String, Object> selectReturnOnTotalAssets(@Param("companyId") Long companyId);

    /**
     * 账面价值关联资产总可租面积 x 总时长
     * @param assetIds 资产id集合
     * @return
     */
    Map<String, Object> selectLettableArea(List<Integer> assetIds);

    /**
     *  资产分类
     * @param companyId
     * @return 返回
     */
    List<Map<String, Object>> selectAssetsCategory(@Param("companyId") Long companyId);

    /**
     *  资产出租比例: 可租面积
     * @param companyIds
     * @return 返回
     */
    List<Map<String, Object>> selectRentableArea(List<Long> companyIds);

    /**
     *  资产出租比例： 已租面积
     * @param companyIds
     * @return 返回
     */
    List<Map<String, Object>> selectLeasedArea(List<Long> companyIds);

    /**
     * 查询资产面积
     *
     * @param companyId 公司id
     * @return 【资产面积】集合
     */
    List<Map<String, Object>> selectAssetArea(Long companyId);

    /**
     * 查询资产价值
     *
     * @param companyId 公司id
     * @return 【资产价值】集合
     */
    List<Map<String, Object>> selectAssetValue(Long companyId);

    /**
     * 查询被占用资产
     *
     * @param companyId 公司id
     * @return 【资产价值】集合
     */
    List<Map<String, Object>> selectBeOccupiedAsset(Integer companyId);
}
